/**
 * 给定50*50的矩阵，给定起点，问走K步能够难道的最大收益
 * K在1E9
 * 每一步可以停留在原地，也可以走四邻域。
 * 显然当K大到一定程度，最优解一定是走到某一格然后持续停留
 * 但是当K比较小的话，不一定能够走到那个驻点
 * 这个分界线最多是2500
 * 因此令Dijk表示从起点到ij走k步拿到的最大收益，k在2500即可
 * 最后对于所有格子，求 Dijk + (K - k) * Aij 的最大值即可
 * 时间复杂度 O(N^4)
 */
#include <bits/stdc++.h>
#include <bits/extc++.h>
using namespace std;

using llt = long long;
using vi = vector<int>;
using vll = vector<llt>;
using pii = pair<int, int>;
using pll = pair<llt, llt>;
using Real = long double;

struct _t{
    int r;
    int c;
    int step;
};

int const DR[] = {-1, 1, 0, 0};
int const DC[] = {0, 0, -1, 1};

int H, W, K;
int Si, Sj;
vector<vi> A;
vector<vector<vll>> D;
queue<_t> Q;

llt proc(){
    D.assign(H + 1, vector<vll>(W + 1, vll(H * W + 1, -1LL)));

    D[Si][Sj][0] = 0;
    Q.push({Si, Sj, 0});
    
    for(int step=1;step<=H*W;++step){
        auto sz = Q.size();
        while(sz--){
            auto [x, y, t] = Q.front(); Q.pop();
            assert(t + 1 == step);

            for(int nx,ny,o=0;o<4;++o){
                nx = x + DR[o];
                ny = y + DC[o];
                if(1 <= nx and nx <= H and 1 <= ny and ny <= W){
                    if(A[nx][ny] + D[x][y][t] > D[nx][ny][step]){
                        D[nx][ny][step] = A[nx][ny] + D[x][y][t];
                        Q.push({nx, ny, step});
                    }
                }
            }
        }
    }

    llt ans = (K + 0LL) * A[Si][Sj];
    for(int i=1;i<=H;++i)for(int j=1;j<=W;++j)for(int k=1;k<=min(K, H*W);++k){
        if(-1 == D[i][j][k]) continue;

        ans = max(ans, D[i][j][k] + (K - k + 0LL) * A[i][j]);
    }
    return ans;
}

void work(){ 
    cin >> H >> W >> K >> Si >> Sj;
    A.assign(H + 1, vi(W + 1, 0));
    for(int i=1;i<=H;++i)for(int j=1;j<=W;++j)cin >> A[i][j];
    cout << proc() << endl;
	return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);	
    int nofkase = 1;
	// cin >> nofkase;
	while(nofkase--) work();
	return 0;
}